/**
 * 
 */
package com.google.code.cana.service;

import java.util.List;

import com.google.code.cana.db.ClienteDao;
import com.google.code.cana.pojo.pessoas.Cliente;

/**
 * @author Samuel de Barros Florentino
 * @author Rodrigo Barbosa Lira
 *
 */
public interface ClienteService {
	
	/**
	 * Persiste informacoes de um novo cliente
	 * @param cliente
	 * @return
	 * @throws RestricaoIntegridadeException quando tenta inserir cliente ja cadastrado
	 */
	public Integer criar(Cliente cliente);
	
	/**
	 * Remove um cliente a partir de um id informado
	 * @param clienteId
	 * @return
	 * @throws ObjetoNaoEncontradoException caso o cliente nao esteja cadastrado
	 * @throws RestricaoIntegridadeException quando nao eh possivel remover o cliente
	 */
	public Cliente apagar(Integer clienteId);
	
	/**
	 * Persiste as modificacoes em um cliente especificado
	 * @param cliente
	 * @throws ObjetoNaoEncontradoException caso o cliente nao esteja cadastrado
	 * @throws RestricaoIntegridadeException quando nao eh possivel modificar o cliente
	 */
	public void modificar(Cliente cliente);
	
	/**
	 * Recupera um cliente a partir do id informado
	 * @param clienteId
	 * @return
	 * @throws ObjetoNaoEncontradoException caso o cliente nao esteja cadastrado
	 */
	public Cliente recuperarPorId(Integer clienteId);
	
	/**
	 * Recupera todos os registros de clientes.
	 * @return
	 */
	public List<Cliente> recuperarTodos();
	
	/**
	 * 
	 * Remove todos os registro de cliente do sistema
	 *
	 */
	public void apagarTodos();
	
	/*
	 * 
	 */
	public void setClienteDao(ClienteDao clienteDao);
	

}
